package br.com.linhadotempo.dao;

import java.util.ArrayList;
import java.util.List;

import twitter4j.Status;
import twitter4j.TwitterException;
import br.com.linhadotempo.util.Mensagens;
import br.com.linhadotempo.util.MicroBlogging;
import br.com.taimlain.modelo.Fato;
import br.com.taimlain.modelo.Usuario;
import br.com.taimlain.util.Datas;

public class FatoDAO extends DaoMestre<Fato> {

	public FatoDAO() {
		super();
	}

	/**
	 * Obtem uma pagina de status do Twitter de um usuario. Status sao twitts e
	 * cada pagina contem 20 status, sendo assim, para cada execusao desse
	 * metodo ele deve retornar no maximo 20 twitts.
	 * 
	 * @param usuario
	 *            de qual deve ser importado os twitts.
	 * @param pagina
	 *            numero da pagina.
	 * @return uma lista contendo no maximo 20 twitts.
	 */
	public List<Fato> obterTwittsDe(Usuario usuario, int qtdPagina) throws TwitterException{
		List<Status> twitts = MicroBlogging.obterTwittsDe(usuario.getIdTwitter(), qtdPagina);
		return converterParaFatosEsses(twitts);
	}

	/**
	 * Converte status em fatos. Metodo para facilitar a conversao.
	 * 
	 * @param twitts
	 *            uma lista de twitts
	 * @return uma lista de fatos
	 */
	private List<Fato> converterParaFatosEsses(List<Status> twitts) {
		List<Fato> fatosDoTwitter = new ArrayList<Fato>();
		try {
			for (Status st : twitts) {
				Fato fato = new Fato();
				fato.setDescricao(st.getText());
				fato.setQuando(Datas.dateParaString(st.getCreatedAt()));
				fatosDoTwitter.add(fato);
			}
		} catch (Exception e) {
			e.printStackTrace();
			Mensagens.getInstance().setError(e.getCause().getMessage());
		}
		return fatosDoTwitter;
	}

}
